package com.leo.basic.scheduler.service;

import com.leo.basic.scheduler.bean.ResponseData;
import com.leo.basic.scheduler.bean.SchedulerJob;

import java.util.Date;
import java.util.List;

public interface ISchedulerJobService {

    /**
     * 查询运行中的任务列表
     *
     * @return
     */
    ResponseData<List<SchedulerJob>> getExecutingJobList();

    /**
     * 创建定时任务
     *
     * @param schedulerJob
     * @return
     */
    ResponseData createScheduleJob(SchedulerJob schedulerJob);

    /**
     * 存储定时任务
     *
     * @param schedulerJob
     * @return
     */
    ResponseData storeScheduleJob(SchedulerJob schedulerJob);

    /**
     * 获取任务对象
     *
     * @param jobId
     * @return
     */
    SchedulerJob getJob(String jobId);

    /**
     * 删除更新
     *
     * @param schedulerJob
     * @return
     */
    ResponseData delUpdate(SchedulerJob schedulerJob);

    /**
     * 查询任务列表
     *
     * @param schedulerJob
     * @return
     */
    List<SchedulerJob> queryJobList(SchedulerJob schedulerJob);

    /**
     * 切换作用运行：暂停/重启运行
     *
     * @param jobId
     * @param execType
     */
    void toggleJobRun(String jobId, String execType);

    /**
     * 切换作用运行：暂停/重启运行
     *
     * @param schedulerJob
     * @param execType
     */
    void toggleJobRun(SchedulerJob schedulerJob, String execType);

    /**
     * 运行一次任务
     *
     * @param jobId
     */
    void executeJob(String jobId);

    /**
     * 删除任务
     *
     * @param jobId
     */
    void deleteJob(String jobId);

    /**
     * 删除任务
     *
     * @param schedulerJob
     */
    void deleteJob(SchedulerJob schedulerJob);

    /**
     * 记录任务执行日志
     *
     * @param schedulerJob
     * @param startTime
     * @param exceptionMessage
     */
    void schedulerSaveLog(SchedulerJob schedulerJob, Date startTime, String exceptionMessage);

    /**
     * 获得任务执行前日志数量
     *
     * @param jobName
     * @return
     */
    int beforeTotalLog(String jobName);
}
